package com.pdsu.alumni.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.pdsu.alumni.dao.MessageRoleMapper;
import com.pdsu.alumni.dao.MessageTypeMapper;
import com.pdsu.alumni.pojo.MessageType;
import com.pdsu.alumni.service.IMessageTypeService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.List;

/**
 * <p>
 * 服务实现类
 * </p>
 *
 * @author Acerola
 * @since 2021-11-05
 */
@Service
public class MessageTypeServiceImpl extends ServiceImpl<MessageTypeMapper, MessageType> implements IMessageTypeService {
    @Autowired
    MessageRoleMapper messageRoleMapper;
    @Autowired
    MessageTypeMapper messageTypeMapper;

    /**
     * 生成树
     *
     * @return
     */
//    @Override
//    public Map<String, Object> findTree() {
//        Map<String, Object> data = new HashMap<String, Object>();
//        try { //查询所有菜单
//            QueryWrapper<MessageType> queryWrapper = new QueryWrapper<>();
//            List<MessageType> messageTypeList = baseMapper.selectList(queryWrapper);
//            List<MessageType> list = new ArrayList<MessageType>();
//            //根节点
//            List<MessageType> rootMenu = new ArrayList<MessageType>();
//            for (MessageType nav : messageTypeList) {
//                if (nav.getTypeParentId().equals("0")) { //父节点是0的，为根节点。
//                    rootMenu.add(nav);
//                }
//            }
//            //为根菜单设置子菜单，getClild是递归调用的
//            for (MessageType nav : messageTypeList) {
//                /* 获取根节点下的所有子节点 使用getChild方法*/
//                List<MessageType> childList = getChild(nav.getKey(), messageTypeList);
//                nav.setChildren(childList);//给根节点设置子节点
//            }
//            /**
//             * 输出构建好的菜单数据。
//             *
//             */
//            data.put("options", messageTypeList);
//            System.out.println(rootMenu);
//            return data;
//        } catch (Exception e) {
//            data.put("options", new ArrayList());
//            return data;
//        }
//    }
//
//    /**
//     * 查询子分类
//     *
//     * @param id
//     * @param allMenu
//     * @return
//     */
//    @Override
//    public List<MessageType> getChild(String id, List<MessageType> allMenu) {
//        //子菜单
//        List<MessageType> childList = new ArrayList<MessageType>();
//        List<MessageTypeTree> list = new ArrayList<MessageTypeTree>();
//        MessageTypeTree messageTypeTree = new MessageTypeTree();
//        MessageType messageType = new MessageType();
//
//        for (MessageType nav : allMenu) {
//            // 遍历所有节点，将所有菜单的父id与传过来的根节点的id比较
//            //相等说明：为该根节点的子节点。
//            if (nav.getTypeParentId().equals(id)) {
//                childList.add(nav);
//            }
//        }
//        //递归
//        for (MessageType nav : childList) {
//            nav.setChildren(getChild(nav.getId(), allMenu));
//        }
//        //如果节点下没有子节点，返回一个空List（递归退出）
//        if (childList.size() == 0) {
//            return new ArrayList<MessageType>();
//        }
//        return childList;
//    }
//
//    /**
//     * 生成角色树
//     *
//     * @param role
//     * @return
//     */
//    @Override
//    public Map<String, Object> findTreeByRole(Role role) {
//        Map<String, Object> data = new HashMap<String, Object>();
//        try {
//            //查询所有菜单
//            List<MessageType> messageTypeList = messageRoleMapper.getMessageTypeWithRole(role.getRoleId());
//            System.out.println("-------------------------");
//            System.out.println(messageTypeList);
//            //根节点
//            List<MessageType> rootMenu = new LinkedList<>();
//            List<MessageType> list = new ArrayList<MessageType>();
//            MessageTypeTree messageTypeTree = new MessageTypeTree();
//            MessageType messageType = new MessageType();
//            for (MessageType nav : messageTypeList) {
//                if (nav.getTypeParentId().equals("0")) { //父节点是0的，为根节点。
//                    rootMenu.add(nav);
//                }
//            }
//            //为根菜单设置子菜单，getClild是递归调用的
//            for (MessageType nav : rootMenu) {
//                /* 获取根节点下的所有子节点 使用getChild方法*/
//                List<MessageType> childList = getChild(nav.getId(), messageTypeList);
//                nav.setChildren(childList);//给根节点设置子节点
//            }
//            /**
//             * 输出构建好的菜单数据。
//             *
//             */
//            data.put("options", rootMenu);
//            return data;
//        } catch (Exception e) {
//            data.put("options", new ArrayList());
//            return data;
//        }
//
//    }
    @Override
    public List<MessageType> Tree() {
        List<MessageType> list = new ArrayList<>();
        //获取所有分类
        List<MessageType> messageTypes = messageTypeMapper.selectList(null);
        //获取所有子类
        List<MessageType> listChildren = messageTypeMapper.selectList(new QueryWrapper<MessageType>().ne("type_parentId", 0));
        for (int i = 0; i < messageTypes.size(); i++) {
            if (messageTypes.get(i).getTypeParentId() == 0) {
                list.add(messageTypes.get(i));
            }
        }
        for (int i = 0; i < list.size(); i++) {
            Integer id = list.get(i).getId();
            List<MessageType> children = new ArrayList<>();
            for (int j = 0; j < listChildren.size(); j++) {
                if (listChildren.get(j).getTypeParentId() == id) {
                    children.add(listChildren.get(j));
                }
            }
            if (children.size() != 0) {
                list.get(i).setChildren(children);
            }
        }
        return list;
    }

    @Override
    public void deleteAll() {
        messageTypeMapper.deleteAll();
    }
}